
package com.reminis.exceldemo.service;

import com.reminis.exceldemo.entity.fromqf;
import com.reminis.exceldemo.mapper.FromqfMapper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import com.reminis.exceldemo.entity.fromqf_download;

@Service
public class FromqfService {
    
    private static final Logger log = LogManager.getLogger(FromqfService.class);
    
    @Autowired
    private FromqfMapper fromqfMapper;

    /**
     * 分页获取fromqf对象列表
     * 此方法通过调用fromqfMapper的getLimitAll方法来获取数据库中指定页码和数量的fromqf对象
     * @param pageInteger 当前页码（从1开始）
     * @param limitInteger 每页显示的记录数
     * @return 包含指定页码fromqf对象的列表
     */
    public List<fromqf> getLimitAll(int pageInteger, int limitInteger) {
        log.info("开始分页查询fromqf数据 - 页码: {}, 每页数量: {}", pageInteger, limitInteger);
        
        try {
            // 计算分页参数：pageInteger代表当前在第几页，limitInteger代表每页的个数
            int pageIndex = (pageInteger - 1) * limitInteger;
            int pageSize = limitInteger;
            
            log.debug("分页参数计算 - 起始索引: {}, 页面大小: {}", pageIndex, pageSize);
            
            List<fromqf> result = fromqfMapper.getLimitAll(pageIndex, pageSize);
            
            log.info("分页查询fromqf数据完成 - 返回记录数: {}", result != null ? result.size() : 0);
            return result;
            
        } catch (Exception e) {
            log.error("分页查询fromqf数据时发生异常 - 页码: {}, 每页数量: {}, 错误信息: {}", 
                     pageInteger, limitInteger, e.getMessage(), e);
            throw new RuntimeException("分页查询fromqf数据失败", e);
        }
    }

    /**
     * 获取所有fromqf对象
     * 此方法通过调用fromqfMapper的getAll方法来获取数据库中所有的fromqf对象
     * @return 包含所有fromqf对象的列表
     */
    public List<fromqf> getAll() {
        log.info("开始查询所有fromqf数据");
        
        try {
            List<fromqf> result = fromqfMapper.getAll();
            log.info("查询所有fromqf数据完成 - 总记录数: {}", result != null ? result.size() : 0);
            return result;
            
        } catch (Exception e) {
            log.error("查询所有fromqf数据时发生异常 - 错误信息: {}", e.getMessage(), e);
            throw new RuntimeException("查询所有fromqf数据失败", e);
        }
    }

    /**
     * 获取用于Excel下载的fromqf数据
     * 此方法通过调用fromqfMapper的douloadExcel方法来获取格式化的下载数据
     * @return 包含下载格式的fromqf_download对象列表
     */
    public List<fromqf_download> douloadExcel() {
        log.info("开始查询Excel下载用的fromqf数据");
        
        try {
            List<fromqf_download> result = fromqfMapper.douloadExcel();
            log.info("查询Excel下载数据完成 - 总记录数: {}", result != null ? result.size() : 0);
            return result;
            
        } catch (Exception e) {
            log.error("查询Excel下载数据时发生异常 - 错误信息: {}", e.getMessage(), e);
            throw new RuntimeException("查询Excel下载数据失败", e);
        }
    }

    /**
     * 获取fromqf对象的总数量
     * 此方法通过调用fromqfMapper的getCount方法来获取数据库中fromqf对象的数量，用于分页计算
     * @return fromqf对象的总数量
     */
    public int getCount() {
        log.info("开始查询fromqf数据总数");
        
        try {
            int count = fromqfMapper.getCount();
            log.info("查询fromqf数据总数完成 - 总数: {}", count);
            return count;
            
        } catch (Exception e) {
            log.error("查询fromqf数据总数时发生异常 - 错误信息: {}", e.getMessage(), e);
            throw new RuntimeException("查询fromqf数据总数失败", e);
        }
    }

    /**
     * 保存fromqf对象到数据库
     * 此方法通过调用fromqfMapper的save方法来保存fromqf对象，返回保存成功的状态
     * @param fromqf 需要保存的fromqf对象
     * @return 保存是否成功（true表示成功，false表示失败）
     */
    public boolean save(fromqf fromqf) {
        log.info("开始保存fromqf对象 - 订单号: {}, 材料编号: {}", 
                fromqf != null ? fromqf.get订单号() : "null", 
                fromqf != null ? fromqf.get材料编号() : "null");
        
        if (fromqf == null) {
            log.error("保存fromqf对象失败 - 传入的fromqf对象为null");
            throw new IllegalArgumentException("fromqf对象不能为null");
        }
        
        try {
            // 记录保存前的对象详细信息
            log.debug("保存fromqf对象详细信息: {}", fromqf.toString());
            
            Integer result = fromqfMapper.save(fromqf);
            boolean success = result != null && result > 0;
            
            if (success) {
                log.info("保存fromqf对象成功 - 订单号: {}, 材料编号: {}, 生成的唯一号码: {}", 
                        fromqf.get订单号(), fromqf.get材料编号(), fromqf.get唯一号码());
            } else {
                log.warn("保存fromqf对象失败 - 订单号: {}, 材料编号: {}, 返回结果: {}", 
                        fromqf.get订单号(), fromqf.get材料编号(), result);
            }
            
            return success;
            
        } catch (Exception e) {
            log.error("保存fromqf对象时发生异常 - 订单号: {}, 材料编号: {}, 错误信息: {}", 
                     fromqf.get订单号(), fromqf.get材料编号(), e.getMessage(), e);
            throw new RuntimeException("保存fromqf对象失败", e);
        }
    }
    
    /**
     * 清空fromqf表中的所有数据
     * 此方法在上传新的Excel文件前调用，用于清除旧数据
     */
    public void truncate() {
        log.info("开始清空fromqf表数据");
        
        try {
            fromqfMapper.truncate();
            log.info("清空fromqf表数据完成");
            
        } catch (Exception e) {
            log.error("清空fromqf表数据时发生异常 - 错误信息: {}", e.getMessage(), e);
            throw new RuntimeException("清空fromqf表数据失败", e);
        }
    }


}

